package com.ctsi.organise.api.impl.local;

import com.ctsi.organise.common.api.PersonServiceProxy;
import com.ctsi.organise.common.constant.PartyType;
import com.ctsi.organise.common.model.Organise;
import com.ctsi.organise.common.model.Person;
import com.ctsi.organise.entity.OrganiseEntity;
import com.ctsi.organise.service.OrganiseEntityManager;
import com.ctsi.organise.service.PersonEntityManager;
import com.ctsi.security.domain.SRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author: zhangjw
 * @Date: 2018/11/13 05:34
 * @Description:
 */
@Service("PersonServiceProxy")
@Primary
public class PersonServiceProxyImpl implements PersonServiceProxy {

    @Autowired
    private PersonEntityManager personEntityManager;
    @Autowired
    private OrganiseEntityManager organiseEntityManager;

    @Override
    public Person findPersonById(String id) {
        return personEntityManager.findPersonEntityById(id);
    }

    /**
     * 根据一组partyids获得人员
     *
     * @param partyids
     * @return
     */
    @Override
    public List<Person> findPersonByPartyIds(List<String> partyids) {
        return null;
    }

    /**
     * 根据组织Id查找出组织
     *
     * @param partyId
     * @return
     */
    @Override
    public List<Organise> findUserLoginByPartyId(String partyId) {
        return null;
    }

    /**
     * 得到人员的组织
     *
     * @param partyId
     * @return
     */
    @Override
    public Organise getDefaultOrgan(String partyId) {
        return personEntityManager.getUserDefaultOrgan(partyId);
    }

    /**
     * @param organ
     * @return
     */
    @Override
    public Organise findOrganTypeById(Organise organ) {
        return null;
    }

    @Override
    public Organise getOrganTypeById(Organise organ, Integer typeId) {
        return null;
    }

    /**
     * 根据人员ID获得具有的角色
     *
     * @param partyid
     * @return
     */
    @Override
    public List<String> getPersonRoleId(String partyid) {
        return null;
    }

    /**
     * 根据PartyId返回该人员所具有的所有角色
     *
     * @param partyid
     * @return
     */
    @Override
    public List<SRole> getRolesByPartyId(String partyid) {
        return null;
    }

    /**
     * 获取该人员的根组织
     *
     * @param personId
     * @return
     */
    @Override
    public Organise getRootOrgan(String personId) {
        return null;
    }

    /**
     * 根据人员Id，获得其下属的Ids（跨部门，按部门排序，取第一个）
     *
     * @param personId
     * @return
     */
    @Override
    public List<String> getUnderMemberIds(String personId) {
        return null;
    }

    /**
     * 根据人员Id及部门Id，获得其下属的Ids
     *
     * @param personId
     * @param organId
     * @return
     */
    @Override
    public List<String> getUnderMemberIdsByOrg(String personId, String organId) {
        return null;
    }

    /**
     * 找到该人员所在部门
     *
     * @param partyid
     * @return
     */
    @Override
    public List<Organise> getBelongOrgan(String partyid) {
        return null;
    }

    /**
     * 得到人员的相对顺序
     *
     * @param partyid
     * @return
     */
    @Override
    public int getPersonRelOrder(String partyid) {
        return 0;
    }

    /**
     * 返回法人组织
     *
     * @param partyid
     * @return
     */
    @Override
    public Organise getCorpByPersonPartyId(String partyid) {
        return null;
    }

    /**
     * 给出一个无序的人员序列，返回按人员顺序排序的序列<br>
     * 数据可能会增加，因为，人员的组织不同
     *
     * @param personIds 人员ID的列表
     * @return
     */
    @Override
    public List<Person> sortPersonIdList(List<String> personIds) {
        return null;
    }

    /**
     * 得到人员的信息
     *
     * @param list
     * @return
     */
    @Override
    public List<Person> findWfPersonInfo(List<String> list) {
        return null;
    }

    @Override
    public int findOrderInOrgan(String organId, String personId) {
        return 0;
    }

    /**
     * 返回人员所属组织链
     *
     * @param partyid
     * @return
     */
    @Override
    public List<OrganiseEntity> getPesonAsc(String partyid) {
       OrganiseEntity organise = personEntityManager.getUserDefaultOrgan(partyid);
        return organiseEntityManager.getOrganiseChain(organise.getPartyId());
    }

    /**
     * 根据用户的姓名模糊查询返回partyids列表,不控制数据权限
     *
     * @param name
     * @return
     */
    @Override
    public List<String> getPersonloginIdsByName(String name) {
        return null;
    }

    @Override
    public void addPerson(Person person) {

    }

    @Override
    public void updatePerson(Person person) {

    }

    @Override
    public int physicalDelPerson(String partyId) {
        return 0;
    }

    @Override
    public void addPersonWithLoginAcc(Person person, String loginId, String password) {

    }

    /**
     * 根据人员id获取所在部门
     *
     * @param userId
     * @return
     */
    @Override
    public Organise getDepart4User(String userId) {
        if ("admin".equals(userId)) {
            Organise org = new OrganiseEntity();
            org.setPartyId("root");
            org.setOrganiseName("管理员组");
            org.setShortName("管理员组");
            return org;
        }
        return personEntityManager.getUserDefaultOrgan(userId);
    }

    /**
     * 根据人员id获取所在的组织，type = MINORGAN
     *
     * @param userId
     * @return
     */
    @Override
    public Organise getOrganise4User(String userId) {
        if ("admin".equals(userId)) {
            Organise org = new OrganiseEntity();
            org.setPartyId("root");
            org.setOrganiseName("管理员组");
            org.setShortName("管理员组");
            return org;
        }
        Organise depart = personEntityManager.getUserDefaultOrgan(userId);
        if ("root".equals(depart.getPartyId()) || PartyType.MINORGAN.value == depart.getPartyTypeId()) {
            return depart;
        }
        return organiseEntityManager.findParentOrganWithPartyType(depart.getParentId(),PartyType.MINORGAN);
    }
}
